Prevod RGB - gray

Otázka od: tomsir1.edu@mail.cez.cz

21. 6. 2004 6:59


Ahoj,

na internetu jsem nasel nasledujici funkci, bohuzel bez blizsiho popisu:

function RgbToGray(RGBColor : TColor) : TColor;
var
  Gray : byte;
begin
  Gray := Round((0.30 * GetRValue(RGBColor)) +
               (0.59 * GetGValue(RGBColor)) +
               (0.11 * GetBValue(RGBColor )));
  Result := RGB(Gray, Gray, Gray);
end;

Potreboval bych vedet, z ceho vychazeji ty koeficienty u jednotlivych
slozek, s kolika odstiny sedi vlastne pracuju a jakym zpusobem bych byl
schopen prevest barvy dejme tomu do 8, 16, 32 ... odstinu sedi ...

Diky Radek



Odpovedá: Pavol Stugel, NETGraphics

21. 6. 2004 7:44

vysledkom poctu 0.3 * Cervena + 0.59 * Zelena + 0.11 * Modra je INTENZITA
farby!
nastavenim RGB na hodnotu intenzity dostanes GRAY farbu.

vysledok mas od 0-255, cize ked chces 8 odtienov tak DIV 8... atd.

palo

> Potreboval bych vedet, z ceho vychazeji ty koeficienty u jednotlivych
> slozek, s kolika odstiny sedi vlastne pracuju a jakym zpusobem bych byl
> schopen prevest barvy dejme tomu do 8, 16, 32 ... odstinu sedi ...


Odpovedá: Daniel Rott

21. 6. 2004 7:41

Ta funkce je spravne, koeficienty vychazeji z pomeru jasu jednotlivych rgb
slozek. Pro prevod do mensiho poctu odstinu staci hodnotu Gray vhodne
podelit, nyni obsahuje hodnotu pro 256 odstinu.

Daniel

----- Original Message -----
From: <tomsir1.edu@mail.cez.cz>
To: <delphi-l@clexpert.cz>
Sent: Monday, June 21, 2004 7:40 AM
Subject: Prevod RGB - gray


na internetu jsem nasel nasledujici funkci, bohuzel bez blizsiho popisu:

function RgbToGray(RGBColor : TColor) : TColor;
var
  Gray : byte;
begin
  Gray := Round((0.30 * GetRValue(RGBColor)) +
               (0.59 * GetGValue(RGBColor)) +
               (0.11 * GetBValue(RGBColor )));
  Result := RGB(Gray, Gray, Gray);
end;

Potreboval bych vedet, z ceho vychazeji ty koeficienty u jednotlivych
slozek, s kolika odstiny sedi vlastne pracuju a jakym zpusobem bych byl
schopen prevest barvy dejme tomu do 8, 16, 32 ... odstinu sedi ...


Odpovedá: Fitz Ladislav

21. 6. 2004 8:32

> na internetu jsem nasel nasledujici funkci, bohuzel bez blizsiho
> popisu:
>
> function RgbToGray(RGBColor : TColor) : TColor;
> var
> Gray : byte;
> begin
> Gray := Round((0.30 * GetRValue(RGBColor)) +
> (0.59 * GetGValue(RGBColor)) +
> (0.11 * GetBValue(RGBColor )));
> Result := RGB(Gray, Gray, Gray);
> end;
>
> Potreboval bych vedet, z ceho vychazeji ty koeficienty u jednotlivych
> slozek, s kolika odstiny sedi vlastne pracuju a jakym zpusobem bych
> byl schopen prevest barvy dejme tomu do 8, 16, 32 ... odstinu sedi ...

ja pouzivam radeji trochu upravenou (nepouziva desetinna cisla)

function Gray (color : longint) : longint;
var i : byte;
begin
  i:=byte((
            (color and $000000ff) *19595+
           ((color and $0000ff00)shr 8)*38469+
           ((color and $00ff0000)shr 16)* 7471
                                               )shr 16);
  result:=(i)or(i shl 8)or(i shl 16);
end;

jinak ty koeficienty by mely vyjadrovat jak moc je lidske oko citlive na
danou slozku barvy

co se tyce daneho poctu odstinutak jak uz tu bylo pouzit div nebo pokud je
to mozne tak shr (pro hodnoty 2,4,8,16,32,64,128) a to jeste pred radkem
result:=....


Odpovedá: Pavol Stugel, NETGraphics

21. 6. 2004 9:22

> ja pouzivam radeji trochu upravenou (nepouziva desetinna cisla)
ak chces zrychlit tak pouzi pre viac pixlov naraz ;) a hlavne nepouzivat
pf24bit, ale pf32bit!!

> co se tyce daneho poctu odstinutak jak uz tu bylo pouzit div nebo pokud je
> to mozne tak shr (pro hodnoty 2,4,8,16,32,64,128) a to jeste pred radkem
> result:=....
hmmmm, DIV ktory sa da previest na SHR kompilator automaticky prevadza, takze
pokial ide o citatelnost kodu je lepsi ten DIV  

A dalsia vec, nasobenie cislami 19595, 38469, 7471 ti zozere viac cyklov ako to
shr ;)))


pri mensom pocte odtienov farieb ako 64 je vhodne pouzit uz aj nejaky ten
rozptil,
lebo obrazok sa ti moze znacte znicit.

palo

ak chces asi najrychlejsi grayscale kukni sem:
http://graph64.netgraphics.sk/download/graph64lib.zip


Odpovedá: Josef Straka

21. 6. 2004 15:38


Prijemny den,

----- Original Message ----- From: "Pavol Stugel,
> Potreboval bych vedet, z ceho vychazeji ty koeficienty u jednotlivych
> slozek, s ....
 Velice pekny clanek na toto tema, ktery bohate postaci na pochopeni tech
koeficientu je tady: http://www.fotoroman.cz/techniques/histogram.htm
Straka Josef
mail: strakajosef@quick.cz
www: http://strakaj.zde.cz